Lab 1 - VHDL
simulation
Part 1
Цел
|
Придобиване на
практически опит за симулация на VHDL проекти.
|
Задание |
Да се разработят
поведенчески VHDL модели на различни цифрови схеми. Да се
провери корекността на моделите посредством симулация. |
Задача 1 --
D-Тригер управляван по ниво (фиксатор,
latch)
Описанието на D-тригер управляван по ниво е
показано на фигура 1, а съответния VHDL код е записан във файла dlb.vhd
. Разгледайте дадения модел и се уверете, че разбирате смисъла на
VHDL конструкциите в него.
entity DLATCH is
port (D, ENA: in bit; Q: out bit);
end DLATCH;
architecture BEHAVIOUR of DLATCH is
begin
process (ENA, D)
begin
if ENA = '1' then
Q <= D;
end if;
end process;
end BEHAVIOUR;
|
|
Фигура 1 --
VHDL модел на D-тригер управляван по ниво. |
Разглеждания тригер (фиг. 1) има вход за данни
D, изход Q и управляващ вход ENA. При подаване на логическа единица
на входа ENA в тригера се записва информацията от входа
D.
Модела на тригера е описан в проектната
единица DLATCH. Поведението на модела се описва в
архитектурата BEHAVIOR. В тази архитектура тригера е
моделиран посредством процес, който се активира при промяна
на сигналите ENA или D.
Симулирайте архитектурата BEHAVIOR на D-тригера
и проверете адекватността на модела като наблюдавате резултатите от
симулацията в графичен (прозорец Wave) и табличен вид (прозорец
List). Обърнете внимание, че промените на изходния сигнал QOUT
настъпват веднага след подаване на високо ниво на разрешаващия вход
ENABLE. Такова поведение е характерно за функционалните
модели. При тях не се специфицира бързодействието на моделиранта
схема и симулатора работи с нулеви закъснения (делта
закъснение според терминологията на VHDL).
Командите за симулация на модела са дадени на
фигури 2 и 3.
Резултатите от симулацията са показани на фигура
4.
wave /* force d 1 100, 0 200, 1 300 force ena 1 0, 0 150 run 300
|
|
Фигура 2
-- Команди за задаване на входни въздействия при
симулацията |
|

|
|
Фигура
3 -- Команден прозорец на
VSystem |
|

|
|
Фигура
4 -- Резултати от симулацията -- прозорец WAVE |
Задача 2 --
D-Тригер управляван по ниво (вариант
STD_LOGIC)
Във втория вариант на модела на D-тригер
управляван по ниво са използвани сигнали от тип std_logic (фигура
5). VHDL кода е записан във файла dlb_std.vhd
.
library IEEE;
use IEEE.std_logic_1164.all;
entity DLATCH is
port (D, ENA: in std_logic; Q: out std_logic);
end DLATCH;
architecture BEHAVIOUR of DLATCH is
begin
process (ENA, D)
begin
if ENA = '1' then
Q <= D;
end if;
end process;
end BEHAVIOUR;
|
|
Фигура 5 --
VHDL mодел на D-тригер управляван по ниво -- вариант със
сигнали от тип
STD_LOGIC. |
Силумирайте този модел на D-тригер и сравнете
резултатите с резултатите от симулацията на модела от задача
1.
Задача 3 --
JK-тригер
Описанието на D-тригер управляван по ниво е
показано на фигура 6, а съответния VHDL код е записан във файла jkb.vhd
. Разгледайте дадения модел и се уверете, че разбирате смисъла на
VHDL конструкциите в него. Обърнете внимание на начина по който се
синхронизира процеса с нараствашия фронт на тригера.
library IEEE;
use IEEE.std_logic_1164.all;
entity JKFF is
port (J, K, CLK : in std_logic; Q :buffer std_logic);
end JKFF;
architecture BEHAVIOR of JKFF is
begin
process (CLK) begin
if (CLK'event and CLK = '1') then
if (J = '0' and K = '0') then
Q <= Q after 10 ns;
elsif (J = '0' and K = '1') then
Q <= '0' after 10 ns;
elsif (J = '1' and K = '0') then
Q <= '1' after 10 ns;
elsif (J = '1' and K = '1') then
Q <= not Q after 10 ns;
end if;
end if;
end process;
end BEHAVIOR;
|
|
Фигура 6 --
VHDL mодел на JK-тригер управляван по фронт. |
Подгответе входни въздействия (т.е. команди
force) за сигналите J, K и CLK съгласно времедиаграмите
показани на фигура 7.
|

|
|
Фигура 7 --
Входни въздействия за симулацията на JK-тригер |
 |
Указание
Описанието на периодичен сигнал се
извършва посредством опцията -repeat на командата
force:
force описание на един
период -repeat период
Например сигналът clk от фигура 7 може да
се опише като force clk 0 0, 1 50 -repeat 100 |
Симулирайте JK-тригера и проверете адекватността
на модела като наблюдавате резултатите от симулацията в графичен
вид. Обърнете внимание, че промените на изходния сигнал Q настъпват
с известно закъснение спрямо тактовия сигнал CLK. Измерете това
закъснение и обяснете на какво се дължи то.
Задача 4 --
D-Tригер управляван по фронт
(flip-flop)
Целта на тази задача е да се разработи
поведенчески модел на D-тригер, управляван по нарастващ фронт на
тактовия сигнал CLK. Закъснението от фронта на тактовия сигнал до
установяване на изхода Q да бъде 10 ns. Интерфейсната част на модела
(entity) е дадена на фигура 8 и е записана във файл dff.vhd
. Да се разработи архитектурната част на модела и да се
извърши симулация като в тригера последователно се записват
стойностите 0, 1 и X.
 |
УказаниеЗа да се провери дали е на лице нарастващ фронт на
сигнала CLK се използва следният оператор: if (CLK = '1' and CLK'event) then
...
end if; |
library IEEE;
use IEEE.std_logic_1164.all;
entity DFF is
port (D, CLK: in std_logic; Q: buffer std_logic);
end DFF;
|
|
Фигура 8 --
Интерфейсна част на VHDL mодел на D-тригер управляван по
фронт. |
Задача 5 --
Симулация на D-Tригер управляван по ниво посредством тестова
установка (test-bench)
Да се разработи тестова установка за
проверка на модела на D-тригер разгледан в задача 2. Схемата на тази
тестова установка е показана на фигура
9а.
|

|
|
Фигура 9а -- Тестова
установка за симулация на D-тригер управляван по ниво |
На фигура 9б е даден текста на тестовата
установка, която се намира във файла dlb_std_tb.vhd
.
Тестовата установка представлява самостоятелна
проектна единица, която се компилира независимо от тествания
модел. Моделът на тригера DLATCH се вклюява в тестовата установка
посредством операторите component (ред 9 - 11) и port map (ред 17).
Входните въздействия да се генерират от процеса STM (ред 19-34).
Връзката между тествания модел и генератора на входните въздействия
се осъществява посредством сигналите DT, ET и QT. Начинът по който
тези сигнали се свързват към портовете на тествания модел се указва
в оператора port map (ред 17).
Времедиаграмите на входните сигнали са показани
на фигура 10.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 |
library IEEE;
use IEEE.std_logic_1164.all;
entity DLATCH_TB is
end;
architecture TB of DLATCH_TB is
component DLATCH
port (D, ENA: in std_logic; Q: out std_logic);
end component;
signal DT, ET, QT: std_logic;
begin
UUT: DLATCH port map (DT, ET, QT);
STM : process
begin
DT <= '0'; ET <= '0';
wait for 20 ns;
DT <= '0'; ET <= '1';
wait for 20 ns;
DT <= '1'; ET <= '1';
wait for 20 ns;
ET <= '1';
DT <= '0' ,'X' after 15 ns, '1' after 20 ns;
wait for 30 ns;
ET <= '0';
DT <= '0' ,'X' after 15 ns, '1' after 20 ns;
wait for 30 ns;
wait;
end process STM;
end TB; |
|
Фигура 9б --
Тестова установка за симулация на D-тригер управляван по
ниво.
|
|

|
|
Фигура 10 --
Входни въздействия за симулация на D-тригер управляван по
ниво
|
Задача 6 --
Симулация на D-Tригер управляван по фронт посредством тестова
установка (test-bench)
Да се разработи тестова установка за проверка на
модела от задача 4. Входните въздействия да се подават от два
отделни процеса: DGEN за данните и CLKGEN за тактовия сигнал (фигура
11). Времедиаграмите на входните сигнали са показани също на фигура
11.
 |
Генерирането на тактовия сигнал може да
се опише по следния начин: CLKGEN : process
begin
CLK <= not CLK;
wait for 25 ns;
end process; |
|

|
|
Фигура 11 --
Тестова установка и входни въздействия за симулация на
D-тригер
|
Задача 7
-- Автоматизирана тестова
установка
В тази задача ще бъде извършена симулация на
модела на JK-тригер (виж задача 3) посредством тестова
установка, която проверява коректността на резултатите от
симулацията. При създаването на подобни "автоматизирани" тестови
установки разработчикът трябва да укаже в кои моменти от симулацията
ще се проверяват изходните на модела и какви са техните коректни
стойности.
Текста на тестовата установка е даден на фигура
12 и във файла jkff_tb.vhd
. Моделът на JK-тригера е даден във файл jkff_err.vhd
. Проверките на изходните сигнали се извършват посредством
операторите assert. Той има следния формат:
assert логическо условие
report текст на съобщение за грешка;
Ако логическото условие не е изпълнено се
отпечатва момента на извършване на проверката и текста на
съобщението за грешка.
Симулирайте модела на тригера и с помощта на
съобщенията от тестовата установка намерете и отстранете допуснатата
в модела грешка.
library IEEE;
use IEEE.std_logic_1164.all;
entity JKFF_TB is
end;
architecture TB of JKFF_TB is
component JKFF
port (J, K, CLK : in std_logic; Q :buffer std_logic);
end component;
signal J, K, Q : std_logic;
signal CLK : std_logic := '1';
begin
UUT: JKFF port map (J, K, CLK, Q);
STM : process begin
-- apply the stimuls
J <= '0'; K <= '1';
-- wait for the outputs to settle
wait for 100 ns;
-- check the results
assert Q = '0' report "Q is not 0";
J <= '0'; K <= '0';
wait for 100 ns;
assert Q = '0' report "Q is not 0";
J <= '1'; K <= '0';
wait for 100 ns;
assert Q = '1' report "Q is not 1";
J <= '0'; K <= '0';
wait for 100 ns;
assert Q = '1' report "Q is not 1";
J <= '1'; K <= '1';
wait for 100 ns;
assert Q = '0' report "Q is not 0";
wait for 100 ns;
assert Q = '1' report "Q is not 1";
wait for 100 ns;
assert Q = '0' report "Q is not 0";
wait;
end process;
CLOCK: process begin
CLK <= not CLK;
wait for 50 ns;
end process;
end TB; |
|
Фигура 12 -- Автоматизирана
тестова установка за симулация на JK-тригер |
|